package com.whfc.fmam.dao;

import com.whfc.fmam.entity.bo.FmamMat;
import com.whfc.fmam.entity.bo.FmamMatType;
import com.whfc.fmam.entity.dto.FmamMatDTO;
import com.whfc.fmam.entity.dto.FmamMatDetailDTO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

@Repository
public interface FmamMatMapper {
    int deleteByPrimaryKey(Long id);

    int insert(FmamMat record);

    int insertSelective(FmamMat record);

    FmamMat selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(FmamMat record);

    int updateByPrimaryKey(FmamMat record);

    /**
     * 查询同步材料列表
     *
     * @param deptId
     * @param lastSyncTime
     * @return
     */
    List<FmamMat> selectSyncMatList(@Param("deptId") Integer deptId, @Param("lastSyncTime") Date lastSyncTime);

    /**
     * 通过材料ID查询材料类别
     *
     * @param matId
     * @return
     */
    FmamMatType selectMatTypeByMatId(@Param("matId") Long matId);

    /**
     * 根据材料类别查找材料
     *
     * @param matTypeId
     * @param keyword
     * @return
     */
    List<FmamMatDTO> selectByMatTypeId(@Param("matTypeId") Long matTypeId, @Param("keyword") String keyword);

    /**
     * 根据材料类别查找材料
     *
     * @param deptId
     * @param keyword
     * @return
     */
    List<FmamMatDTO> selectByDeptId(@Param("deptId") Integer deptId, @Param("keyword") String keyword);

    /**
     * 根据code查找
     *
     * @param fullCode
     * @return
     */
    FmamMat selectByFullCodeAndDeptId(@Param("fullCode") String fullCode,
                                      @Param("deptId") Integer deptId);

    /**
     * 修改材料偏差
     *
     * @param deptId
     * @param matTypeIds
     */
    void updateDiffByMatTypeId(@Param("deptId") Integer deptId,
                               @Param("matTypeIds") List<Long> matTypeIds,
                               @Param("diffType") Integer diffType,
                               @Param("plusDiff") Double plusDiff,
                               @Param("minusDiff") Double minusDiff);

    void deleteLogicById(@Param("id") Long id);

    /**
     * 批量插入数据
     */
    void batchInsert(@Param("matList") List<FmamMat> matList);

    FmamMat selectByNameSpecModelAndDeptId(@Param("name") String name, @Param("spec") String spec,
                                           @Param("model") String model, @Param("deptId") Integer deptId);


    /**
     * 获取随机材料
     *
     * @param deptId
     * @return
     */
    FmamMatDetailDTO getRandomMat(@Param("deptId") Integer deptId);


}